package com.brillilab.service.core.user;

import com.brillilab.domain.po.user.Users;
import com.brillilab.domain.vo.lab.LabInfoVo;
import com.brillilab.domain.vo.user.UsersVo;

import java.util.List;

/**
 * 用户服务接口
 *
 * @author wmh
 */
public interface IUsersService {

    /**
     * 通过ID获取用户
     * @param userId 用户ID
     * @Param state  正常1 ; 冻结 2 ; 删除 3 ; 全部 null
     * @return Users
     */
    Users selectUser(Long userId,Integer state);

    /**
     * 通过用户Id列表获取用户列表
     * @param userIdList
     * @param state
     * @return
     */
    List<Users>
    selectUserList(List<Long> userIdList,Integer state);

    /**
     * 通过 mobile , password 查找用户
     * @param mobile  手机号
     * @param password 密码
     * @param state state 正常1 ; 冻结 2 ; 删除 3 ; 全部 null
     * @return Users
     */
    Users selectUser(String mobile,String password,Integer state);

    /**
     * 通过 mobile 查找用户
     * @param mobile 手机号
     * @param state state 正常1 ; 冻结 2 ; 删除 3 ; 全部 null
     * @return
     */
    Users selectUser(String mobile,Integer state);

    /**
     * 根据 mobile , secutityPwd 查找用户
     * @param mobile
     * @param securityPwd
     * @return
     */
    Users selectUser(String mobile,String securityPwd);

    /**
     * 根据 labMemberId labId 查找用户
     * @param labId
     * @param labMemberId
     * @param state
     * @return
     */
    Users selectUser(Long labId,Long labMemberId,Integer state);

    boolean updateById(Users me);

    Users selectUserByEmail(String email,Integer state);

    /**
     * 设置labId 为空
     * @param id
     * @return
     */
    boolean setLabIdNull(Long id);

    /**
     * 用户实验室列表
     * @param id
     * @param state
     * @return
     */
    List<LabInfoVo> selectLabInfoVo(Long id,Integer state);

    /**
     * 插入
     * @param user
     * @return
     */
    Users insert(Users user);
    
    /**
     * 根据 labMemberIds labId 查找用户
     * @param labId
     * @param labMemberIds
     * @param state
     * @return
     */
    List<UsersVo> selectUserList(Long labId, List<Long> labMemberIds, Integer state);

    /**
     * 跟新最近登录时间
     * @param id
     * @return
     */
    int updateLastLoginTime(Long id);

    List<Users> selectUserList(String email);

    /**
     * 获取所有正常用户
     * @return
     */
    List<Users> selectAllUserList();
    /**
     * 获取所有试用期用户
     * @return
     */
    List<Users> selectAllTryUserList();
}
